Repository navigation
住所から郵便番号を探す機能と、事業所の個別郵便番号データへの対応を追加 - #10
Merged
Merged
Conversation
- FindByAddress / TryGetZipCode を追加し、住所から郵便番号を探せるようにした - 町域名の括弧書き(丁目・番地の範囲、超高層ビルの階、地区名、その他)で絞り込む - 同名の市区町村は町域名まで一致した方、町域名が一致しなければ代表の郵便番号 - 住所の照合で、漢数字と算用数字(北六条 と 北6条)、郡名の省略を区別しないようにした - 事業所の個別郵便番号データ(JIGYOSYO.CSV、Shift_JIS)を読み込めるようにした - 住所と事業所名から個別郵便番号を探せる - 個別郵便番号のバーコードは住所表示番号を CC4 で埋める(マニュアル p22) - README と CLAUDE.md を更新 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE
- 事業所名の部分一致は、住所が番地等まで一致する場合のみ採用するようにした (「田中」が「田中貴金属工業」の個別郵便番号になっていた) - 郵便番号データ・事業所の個別郵便番号データの都道府県名を確認し、 文字コードが違うファイルを読み込んだ場合は例外にした - 同名の市区町村は、町域名がより長く一致した方を優先するようにした - 住所・ビル名・事業所名の照合で、英字の大文字・小文字を区別しないようにした - 「大字」「字」の照合位置を住所ごとに1回だけ求めるようにし、最長一致の処理と市区町村の型をまとめた - 漢数字の一覧を BarCode にまとめた - テスト用データの架空の都道府県名を実在のものにした Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE
char.ToUpperInvariant は住所の分割で1件あたり約1μs(1.9μs→3.0μs)遅くなっていたため、 ToHankaku 後の半角 a~z だけを大文字にするようにした。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE
- net8.0 では、住所照合の正規化をスタック上で行い、CSV の読み込みで使う列だけを文字列にする - 住所の分割を都道府県名・市区町村名・町域名の順の照合に変え、候補文字列を作らないようにした(両方のビルド) - 郵便番号のチェックを LINQ・正規表現を使わないループにした(両方のビルド) - テストでコアのビルドを切り替えられるようにした(dotnet test -p:CoreTargetFramework=netstandard2.0) - README と CLAUDE.md を更新 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE
コアを netstandard2.0 と net8.0 のマルチターゲットにし、net8.0 では Span<T> を使う
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
README の備考にあった「住所→郵便番号変換辞書」を実装しました。あわせて、日本郵便の事業所の個別郵便番号データ(JIGYOSYO.CSV)も読み込めるようにしました。データはどちらも同梱せず、利用者側で指定します。
追加した API
dictionary.FindByAddress(住所)dictionary.FindByAddress(住所, 事業所名)dictionary.TryGetZipCode(住所[, 事業所名], out 郵便番号)trueZipCodeDictionary.Load(KEN_ALLのパス, JIGYOSYOのパス)/Load(Stream, Stream, Encoding)ZipCodeEntry.Kind/BusinessName/Block/IsIndividual住所から郵便番号を探す方法
事業所名を渡した場合は、住所の市区町村にある事業所から、事業所名(空白・全角半角・「株式会社/(株)」の違いは区別しない)が一致するものを探します。同じ名前が複数あれば、番地等がいちばん長く一致するもの(私書箱番号を含む)を選びます。
照合の改善(住所の分割にも効く)
個別郵便番号のバーコード
マニュアル p22 に従い、大口事業所・私書箱の個別郵便番号は個別番号のみをバーコード化し、住所表示番号の 13 けたは CC4 で埋めます(事業所データを読み込んだ場合)。
実データでの確認
2026年10月更新の utf_ken_all.csv と JIGYOSYO.CSV で、データから組み立てた住所を検索しました。実際の住所の書き方の揺れまでは確かめていません。
まだできないこと(README に明記)
コードレビューへの対応
テスト
dotnet testで 237 件すべて成功(61 件追加)。TestData/jigyosyo_sample.csvは実データと同じ Shift_JIS のため、.gitattributesで binary 指定した。🤖 Generated with Claude Code
https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE